package cho114366.basic;

//p341

public class J21_String {
	// 틀별한 경우 아니면 new형태로 쓰지 않는다 메모리 관리를 위해서.....
	public static void main(String[] args) {
		// 문자열 클래스 다루기
		// 주민번호를 이용해서 성별 확인
		// 9 : 남자
		// 8 : 여자
		String jumin = "123456-9876543";
		System.out.println("문자열 길이 : " + jumin.length());// String 타입의 변수 +
															// String
															// 클래스의 메서드호출
		System.out.println("성별문자 : " + jumin.charAt(8 - 1));// 0 부터시작하기 때문에 원하는
															// 위치는 -1 이다.
		System.out.println("성별문자 : " + jumin.substring(7));// 시작위치부터 나머지문자 가져옴
		System.out.println("성별문자 : " + jumin.substring(7, 8));// 끝자리는 -1을 한다. 결국
																// 값은 한자리 출력!
		String msg = "hello"; // 같은 곳의 저장소 위치를 가르킴
		if (msg == "hello")
			System.out.println("일치함!");
		else
			System.out.println("일치안함!");
		String msg2 = "hello";
		if (msg == msg2) // 같은 저장소를 가르킨다.
			System.out.println("일치함!");
		else
			System.out.println("일치안함!");

		String msg3 = new String("Java"); // new 연산자는 일치하지 않는다. 저장소 주소가 틀리다.
		String msg4 = new String("Java");
		if (msg3 == msg4)
			System.out.println("일치함"); // 출력을 하려면 sys.out.print가 필요하다.
		System.out.println("일치안함");
		// msg3과 msg4가 메모리에 생성된 위치(주소)
		// String 객체 비교시 = 연산자는
		// 참조된 주소의 동질성을 확인함

		// msg하고(리터럴)하고 msg5(new) 비교
		String msg5 = new String("hello");
		// msg과 msg5는 메모리에 생성된 취치(주소) 가 다름
		// == 연산자로 비교해보면 '불일치'로 출력
		if (msg == msg5)
			System.out.println("일치함"); // 출력을 하려면 sys.out.print가 필요하다.
		else
			System.out.println("일치안함");

		/*------------------------------------------------------*/
		// == 연산자 대신에 equals 메서드를 사용해야 함
		if (msg.equals(msg4))
			System.out.println("일치");
		else
			System.out.println("불일치");

		if (msg.equals(msg5))
			System.out.println("일치");
		else
			System.out.println("불일치");
		/*------------------------------------------------------------*/
		// 문자열 연결시 + 연산자 사용하면
		// 필요없는 객체 생성이 동반되어
		// 메모리 사용율과 CPU 자원이 소모가 커짐
		// 따라서, StringBuilder나 StringBuffer를
		// 사용할 것을 추천!
		String sql = "update BookDB" + "set title=?,publisher=?,author=?,"
				+ "regdate=sysdate" + "where id=?"; // 저장소 메모리자원을 많이 먹는다.
		StringBuilder sql2 = new StringBuilder(); // 빌더 클래스호출
		sql2.append("updateDB ").append("set title=?,publisher=?,author=?, ")
				.append("regdate=sysdate ").append("where id= ? "); // 한 저장소에 이어 붙히기
		System.out.println(sql2); // 자동 형변환
		String tmp = sql2.toString(); // 수동 형변환, 넘기진 못하고 투스트링을 이용해서
		System.out.println(tmp); // 
	}

}
